"""
处理文件，计算每日销售额并以柱状图的形式展示
设计一个类，完成程序的封装
设计一个抽象类，定义文件读取的相关功能，并使用子类实现具体功能
读取文件产生数据对象
进行数据逻辑计算
生成柱状图

# 首先读取数据，设计一个读取数据类
# 然后封装数据，定义一个数据类
# 再计算数据，设计一个计算数据类
# 最后生成图表



主程序的部分，首先是读取数据，我做的俩个文件读取类返回值是list【Record】，Record对象有四个属性，而做一个柱状图需要X和Y俩个数据
因此需要一个X和Y能相对应的数据容器，也就是字典。
首先，是将两个类返回的对象合并成一整个数据，因为都是list【Record】类型的数据，所以直接使用加号链接即可。
其次，将总数据中的日期和销售额的两个数据存储到图表数据的字典中，因为该列表的元素是Record类的对象，所以可以使用对象的属性来指定某个值
第三，对于总数据的遍历，获取的是列表中的Record对象
字典的键是日期，值是销售额，初始销售额为空，所以对于销售额的处理需要由两种情况，如果销售额为空，那么给value赋值，否则就是累加
"""
from pyecharts.options import VisualMapOpts, ToolboxOpts, LabelOpts

from model.data_Object import Record
from file_Reader_class import FileReader, FileReader_csv, FileReader_Json
from pyecharts.charts import Bar
from pyecharts import options

reader_csv = FileReader_csv("F:/Python/res/2011年1月销售数据.txt")
reader_json = FileReader_Json("F:/Python/res/2011年2月销售数据JSON.txt")

data_csv: list[Record] = reader_csv.read_file()
data_json: list[Record] = reader_json.read_file()

data_all = data_csv + data_json

# print([str(r) for r in data_all])

# try:
#     data_all=data_csv+data_json
#     print(type(data_all))
# except TypeError as e:
#     print(type(data_csv))
#     print(type(data_json))

data_dict = dict()
for record in data_all:
    if record.date in data_dict.keys():
        data_dict[record.date] += record.sale
    else:
        data_dict[record.date] = record.sale

# for data in data_dict:
#     print(f"{data}:{data_dict[data]}")


bar_sale = Bar(init_opts=options.InitOpts(width="1200px", height="600px"))

date_list = []
sale_list = []

for key in data_dict:
    date_list.append(key)
# print(date_list)

for data in data_dict:
    sale_list.append(data_dict[data])

# print(sale_list)

bar_sale.add_xaxis(date_list)
bar_sale.add_yaxis("销售额", sale_list,label_opts=LabelOpts(is_show=False))

bar_sale.set_global_opts(
    toolbox_opts=ToolboxOpts(
        is_show=True,  # 是否显示工具箱
        pos_right="100%",  # 位置
        pos_top="10%",
        orient="vertical",
        feature=options.ToolBoxFeatureOpts(
            save_as_image=options.ToolBoxFeatureSaveAsImageOpts(  # 保存为图片
                title="保存为图片",
                pixel_ratio=2
            ),
            restore=options.ToolBoxFeatureRestoreOpts(title="重置"),  # 重置
            magic_type=options.ToolBoxFeatureMagicTypeOpts(  # 动态类型切换
                type_=["line", "bar"]
            )
        )
    )
)

bar_sale.render("全国各省份销售额——2011.1&&2011.2.html")
